Skip to content

fix(index): declare FM index row address results - #8855

Open
lance-gatefixer[bot] wants to merge 2 commits into
mainfrom
gatekeeper/fix-8848-1
Open

fix(index): declare FM index row address results#8855
lance-gatefixer[bot] wants to merge 2 commits into
mainfrom
gatekeeper/fix-8848-1

Conversation

@lance-gatefixer

Copy link
Copy Markdown
Contributor

Summary

  • Declare FM scalar-index search results as physical row addresses.
  • Add a multi-fragment stable-row-ID regression test that compares indexed and unindexed contains scans.

Root cause

FM indices are trained over the _rowaddr column and return physical row addresses. FMIndexScalarIndex inherited the ScalarIndex default that declares results to be logical row IDs, so stable-row-ID datasets skipped address-to-row-ID translation and dropped matches outside fragment 0. The same incorrect declaration also selected the wrong index-maintenance domain.

Fix

Override results_are_row_addresses() for FMIndexScalarIndex. This routes FM matches through the existing dataset-layer address translation and makes index maintenance treat FM coverage in the physical-address domain.

Validation

  • cargo test -p lance test_fm_index_with_stable_row_ids -- --nocapture
  • cargo test -p lance-index scalar::fmindex::tests
  • cargo fmt --all -- --check
  • cargo clippy --all --tests --benches -- -D warnings

Fixes #8848

@github-actions github-actions Bot added A-index Vector index, linalg, tokenizer bug Something isn't working labels Aug 28, 2026
lance-gatekeeper[bot]

This comment was marked as outdated.

@lance-gatekeeper lance-gatekeeper Bot added the K-changes Latest Gatekeeper recommendation requests changes. label Aug 28, 2026
@lance-gatekeeper lance-gatekeeper Bot removed the K-changes Latest Gatekeeper recommendation requests changes. label Aug 28, 2026

@lance-gatekeeper lance-gatekeeper Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gate recommendation: approve.

The earlier maintenance gap is fixed. FM results now consistently use the physical-address domain at query execution and manifest maintenance, with stable-row-ID regressions covering multi-fragment scans, rewrites, and compaction.

@lance-gatekeeper lance-gatekeeper Bot added the K-approved Latest Gatekeeper recommendation permits acceptance. label Aug 28, 2026
@lance-gatefixer

Copy link
Copy Markdown
Contributor Author

Blocked: the current-head Rust linux-build check is blocked by runner io_uring resource exhaustion.

Head 4a45808 contains the current main tip. Job 98966698899 failed only lance-io::uring::tests::test_read_small_file because both io_uring workers returned ENOMEM; 7,472 tests passed before cancellation, and the repair does not modify lance-io. A failed-job rerun was attempted, but this App lacks Actions rerun access. Someone with Actions permission should rerun linux-build; alternatively, if main advances, merge the new base tip to supersede this check.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-index Vector index, linalg, tokenizer bug Something isn't working K-approved Latest Gatekeeper recommendation permits acceptance.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug: FM index returns row addresses but does not declare the address domain

0 participants